#ifndef CSUPBR_SCENE_H
#define CSUPBR_SCENE_H

#include <vector>
#include "light.h"

namespace csupbr {

    struct Accel;
    struct Camera;
    struct SkyBoxShader;

    struct Scene : Primitive {
        Scene(std::shared_ptr<Accel>accel, std::shared_ptr<Camera> camera);
        bool intersect(const Ray &ray, Intersection &isct) const override;
        bool intersectP(const Ray &ray, bool blend_test) const override;
        BBox3f getBBox() const override { return BBox3f(); }
        Spectrum sample_li(LightRecord &lRec, const Intersection &spit,
                           const Point2f &sample, Float &pdf) const;
        std::shared_ptr<Accel> accel;
        std::shared_ptr<Camera> camera;
        std::shared_ptr<SkyBoxShader> skybox;
        std::vector<std::shared_ptr<Light>> lights;
    };
}

#endif // !CSUPBR_SCENE_H